package zheezes.protocol.impl.wt.du;

import java.util.LinkedHashMap;
import java.util.Map;
import java.util.Map.Entry;

import zheezes.protocol.impl.wt.DataUnit;
import zheezes.protocol.impl.wt.meta.FrzData;
import zheezes.protocol.impl.wt.meta.FrzDate;
import zheezes.protocol.impl.wt.meta.WtMtAddr;


public class Ctrl9EDi0243DataUnit extends DataUnit {
	private FrzDate date = new FrzDate();
	private Map<WtMtAddr, FrzData> map = new LinkedHashMap<WtMtAddr, FrzData>();

	public FrzDate getFrzDate() {
		return date;
	}

	public void setFrzDate(FrzDate date) {
		this.date = date;
	}
	
	public Map<WtMtAddr, FrzData> getFrzData() {
		return map;
	}

	@Override
	public int getData(byte[] buf, int offset) {
		int idx = offset;
		idx += date.getBytes(buf, idx);
		for (Entry<WtMtAddr, FrzData> e : map.entrySet()) {
			idx += e.getKey().getBytes(buf, idx);
			idx += e.getValue().getBytes(buf, idx);
		}
		return idx - offset;
	}

	@Override
	public int setData(byte[] buf, int offset, int max) {
		int idx = offset;
		idx += date.setBytes(buf, idx, max);
		while (idx < max) {
			WtMtAddr a = new WtMtAddr();
			idx += a.setBytes(buf, idx, max);
			FrzData d = new FrzData();
			idx += d.setBytes(buf, idx, max);
			map.put(a, d);
		}
		return idx - offset;
	}

	@Override
	public int sizeOfData() {
		return date.size() + map.size() * (WtMtAddr.SIZE + FrzData.SIZE);
	}
}
